abstraction vs encapsulation